const cluster = require('cluster');
//cluster是一个nodejs内置的模块，用于nodejs多核处理
const http = require('http');
if (cluster.isMaster) {
//判断是不是master节点
//如果cluster是master总控节点
//跟踪 http 请求，每隔一秒在控制台输出numReqs的值
  let numReqs = 0;
  setInterval(() => {
    console.log(`numReqs = ${numReqs}`);
  }, 1000);
// 计数请求
  function messageHandler(msg) {
    if (msg.cmd && msg.cmd === 'notifyRequest') {
      numReqs += 1;
    }
  }

  const numCPUs = require('os').cpus().length;
  console.log(numCPUs);
  for (let i = 0; i < numCPUs; i++) {
        cluster.fork();
//根据CPU的数量，创建多个worker进程
  }

  for (const id in cluster.workers) {
//遍历获得集群中所有存活的worker对象，监听包含 notifyRequest 的消息

cluster.workers[id].on('message', messageHandler);
//根据worker运行节点接受多个信息
  }

} else {
//否则启动worker的http服务器
// Worker processes have a http server.
  http.Server((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
// 通知主进程关于请求
    process.send({ cmd: 'notifyRequest' });
  }).listen(8000);
}
